package _10线程原子性问题;

public class Demo {
    static int x=0;

    public static void main(String[] args) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100000; i++) {
                   x++;
                }

                System.out.println(x);
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100000; i++) {
                    x++;
                }
                System.out.println(x);
            }
        }).start();


        //输出结果
        //102058
        //158682
        //原因：

        /**x++是三个实现过程
        从主内存中拷贝变量x的初始值到线程的工作内存中。
        在线程工作内存中对x变量加1。
        将工作内存中的x的最新值更新回主内存。
         **/
        // 线程一可能已经自加到10了，线程二还在5，当线程二抢占到线程之后，自加为6并赋值给x，才导致次数缺失
    }
}
